/**
 * Builds the DLL for development electron renderer process
 */

import webpack from 'webpack';
import path from 'path';
import { merge } from 'webpack-merge';
import baseConfig from './webpack.config.base';
import webpackPaths from './webpack.paths';
import { dependencies } from '../../package.json';
import checkNodeEnv from '../scripts/check-node-env';

checkNodeEnv('development');

const dist = webpackPaths.dllPath;

const configuration: webpack.Configuration = {
	context: webpackPaths.rootPath,

	devtool: 'eval',

	mode: 'development',

	target: 'electron-renderer',

	externals: ['fsevents', 'crypto-browserify'],

	/**
	 * Use `module` from `webpack.config.renderer.dev.js`
	 */
	module: require('./webpack.config.renderer.dev').default.module,

	entry: {
		renderer: Object.keys(dependencies || {}),
	},

	output: {
		path: dist,
		filename: '[name].dev.dll.js',
		library: {
			name: 'renderer',
			type: 'var',
		},
	},

	plugins: [
		new webpack.DllPlugin({
			path: path.join(dist, '[name].json'),
			name: '[name]',
		}),

		/**
		 * Create global constants which can be configured at compile time.
		 *
		 * Useful for allowing different behaviour between development builds and
		 * release builds
		 *
		 * NODE_ENV should be production so that modules do not perform certain
		 * development checks
		 */
		new webpack.EnvironmentPlugin({
			NODE_ENV: 'development',
		}),

		new webpack.LoaderOptionsPlugin({
			debug: true,
			options: {
				context: webpackPaths.srcPath,
				output: {
					path: webpackPaths.dllPath,
				},
			},
		}),
	],
};

export default merge(baseConfig, configuration);
